/*
 - Autor(es):
 -      Rommel A. Quintanilla C.
 -      Donia A. Ruelas A.
 -      Julio C. Ccahuana M.
 - Fecha: 16/05/07

 - Copyleft: (C) 2007
 - Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los
 - terminos de la Licencia Publica General de GNU segun es publicada por la Free
 - Software Foundation, de la version 2 de dicha Licencia.
 -
 - Este programa se distribuye con la esperanza de que sea util, pero SI NINGUNA
 - GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o ADECUACION A UN
 - PROPOSITO PARTICULAR. Consulte la GNU General Public License (GPL) para mas
 - detalles adjuntada a este programa. (Fichero: JuradoWeb-License.txt).
 -
 - Descripcion:
 - Bean Concurso.
*/

package pe.edu.unap.jurado.BeansDatos;

import java.io.*;
import java.sql.*;
import java.util.*;
import javax.xml.bind.*;
import pe.edu.unap.jurado.BeansDatos.BeanConfiguracionDatos;
import pe.edu.unap.jurado.Beans.*;

public class BeanConcursoDatos extends BeanDatos
{
  public BeanConcursoDatos()
  throws SQLException
  {
   fichero = new String("BeanConcursoDatos.java");
  }

 public String getIdConcurso(String nombreConcurso)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT * FROM Concurso WHERE nombreConcurso = ?;");
  instruccion.setString(1,nombreConcurso);
  ResultSet resultado=instruccion.executeQuery();

  resultado.next();
  String idConcurso = resultado.getString(1);
  return idConcurso;
 }
 
 public BeanConcurso getConcurso(String idConcurso)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT * FROM Concurso WHERE idConcurso = ?;");
  instruccion.setString(1,idConcurso);
  ResultSet resultado=instruccion.executeQuery();

  BeanConcurso concurso=new BeanConcurso();
  resultado.next();

  concurso.setIdConcurso(resultado.getString(1));
  concurso.setIdAdministrador(resultado.getString(2));
  concurso.setNombreConcurso(resultado.getString(3));
  concurso.setBases(resultado.getString(4));
  concurso.setDuracion(resultado.getString(5));
  concurso.setHoraInicio(resultado.getString(6));
  concurso.setFechaInicio(resultado.getString(7));
  concurso.setNumIntegrantes(resultado.getString(8));
  return concurso;
 }

 public BeanConcurso getConcursoActual()
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT * FROM Concurso WHERE DATE(fechaInicio) >= DATE(NOW()) AND TIME(horaInicio) <= TIME(DATE_ADD(NOW(), INTERVAL HOUR(duracion) HOUR));");
  ResultSet resultado=instruccion.executeQuery();
  BeanConcurso concurso=new BeanConcurso();
  if(!resultado.next())
   return null;

  concurso.setIdConcurso(resultado.getString(1));
  concurso.setIdAdministrador(resultado.getString(2));
  concurso.setNombreConcurso(resultado.getString(3));
  concurso.setBases(resultado.getString(4));
  concurso.setDuracion(resultado.getString(5));
  concurso.setHoraInicio(resultado.getString(6));
  concurso.setFechaInicio(resultado.getString(7));
  concurso.setNumIntegrantes(resultado.getString(8));
  return concurso;
 }
 
 public int esConcursoActivo(String idConcurso)
 throws SQLException
 {
  instruccion=conexion.prepareStatement("SELECT idConcurso FROM Concurso WHERE fechaInicio < DATE(NOW()) OR (fechaInicio = DATE(NOW()) AND TIME(NOW()) > TIME(horaInicio + duracion));");
  ResultSet resultado=instruccion.executeQuery();
  
  while(resultado.next())
  {
   if(resultado.getString(1).equals(idConcurso)==true)
    return 3; //Concurso Pasado
  }
  
  instruccion=conexion.prepareStatement("SELECT idConcurso FROM Concurso WHERE fechaInicio > DATE(NOW()) OR (fechaInicio = DATE(NOW()) AND TIME(NOW()) < horaInicio);");
  resultado=instruccion.executeQuery();
  
  while(resultado.next())
  {
   if(resultado.getString(1).equals(idConcurso)==true)
    return 2; //Concurso en Espera
  }  
  
  //instruccion=conexion.prepareStatement("SELECT idConcurso FROM Concurso WHERE ((DATE(fechaInicio) = DATE(NOW())) AND (TIME(TIME(horaInicio) + TIME(duracion)) > TIME(NOW())) AND (TIME(horaInicio) < TIME(NOW()))) = 1;");
  instruccion=conexion.prepareStatement("SELECT idConcurso FROM Concurso WHERE fechaInicio = DATE(NOW()) AND TIME(horaInicio + duracion) > TIME(NOW()) AND (horaInicio < TIME(NOW()));");
  resultado=instruccion.executeQuery();
    
  while(resultado.next())
  {
  	if(resultado.getString(1).equals(idConcurso)==true)
  	 return 1; //Concurso en Progreso
  }
  
  return 0; //error
 }

 public List getListaConcurso()
 throws SQLException
 {
  List lista=new ArrayList();
  instruccion=conexion.prepareStatement("SELECT * FROM Concurso;");
  ResultSet resultado=instruccion.executeQuery();

  while(resultado.next())
  {
   BeanConcurso concurso=new BeanConcurso();
   concurso.setIdConcurso(resultado.getString(1));
   concurso.setIdAdministrador(resultado.getString(2));
   concurso.setNombreConcurso(resultado.getString(3));
   concurso.setBases(resultado.getString(4));
   concurso.setDuracion(resultado.getString(5));
   concurso.setHoraInicio(resultado.getString(6));
   concurso.setFechaInicio(resultado.getString(7));
   concurso.setNumIntegrantes(resultado.getString(8));
   lista.add(concurso);
  }
  return lista;
 }

 public void registrarConcurso(BeanConcurso concurso)
 throws SQLException
 {
   instruccion=conexion.prepareStatement("INSERT INTO Concurso (idAdministrador,nombreConcurso,bases,duracion,horaInicio,fechaInicio,numIntegrantes) VALUES(?,?,?,?,?,?,?);");

   instruccion.setString(1,concurso.getIdAdministrador());
   instruccion.setString(2,concurso.getNombreConcurso());
   instruccion.setString(3,concurso.getBases());
   instruccion.setString(4,concurso.getDuracion());
   instruccion.setString(5,concurso.getHoraInicio());
   instruccion.setString(6,concurso.getFechaInicio());
   instruccion.setString(7,concurso.getNumIntegrantes());
   instruccion.executeUpdate();
 }
}
